]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
overview: Keep open when a Control key is held
authorFlorian Müllner <fmuellner@gnome.org>
Thu, 21 Feb 2013 14:57:00 +0000 (15:57 +0100)
committerFlorian Müllner <fmuellner@gnome.org>
Thu, 21 Feb 2013 16:21:54 +0000 (17:21 +0100)
It is useful at times to perform several actions that would usually
close the overview (for instance launching an application) at once.
Currently we allow this by dragging items to a workspace rather than
just clicking it, but it's an odd metaphor with its own set of
problems.
Introduce an alternative approach (inspired by file selection in
file managers) by keeping the overview open if a Control key is
held down.

https://bugzilla.gnome.org/show_bug.cgi?id=686984

js/ui/overview.js

index 4d8dce7ec5682ce95c63d217bd73d678fc98a4d5..6d487f619a64e8aeef4baa047433cc20707386f1 100644 (file)
@@ -92,7 +92,9 @@ const Overview = new Lang.Class({
     _init: function() {
         this._overviewCreated = false;
         this._initCalled = false;
+        this._controlPressed = false;
 
+        global.stage.connect('captured-event', Lang.bind(this, this._capturedEvent));
         Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
         this._sessionUpdated();
     },
@@ -224,6 +226,20 @@ const Overview = new Lang.Class({
         }
     },
 
+    _capturedEvent: function(actor, event) {
+        let type = event.type();
+        if (type != Clutter.EventType.KEY_PRESS &&
+            type != Clutter.EventType.KEY_RELEASE)
+            return false;
+
+        let symbol = event.get_key_symbol();
+        if (symbol == Clutter.KEY_Control_L ||
+            symbol == Clutter.KEY_Control_R)
+            this._controlPressed = type == Clutter.EventType.KEY_PRESS;
+
+        return false;
+    },
+
     _sessionUpdated: function() {
         this.isDummy = !Main.sessionMode.hasOverview;
         this._createOverview();
@@ -565,6 +581,9 @@ const Overview = new Lang.Class({
         if (!this._shown)
             return;
 
+        if (this._controlPressed)
+            return;
+
         if (!this._shownTemporarily)
             this._animateNotVisible();